// 的代码写在了顶层（组件 setup 之外），这会导致监听在组件实例创建之前就注册，且没有对应的注销。
// 组件 B 挂载时没有重新注册监听，且 handler 函数和监听函数不匹配，导致 eventBus.off("updateData", handler) 无法正确注销监听。
// 更重要的是，组件 A 先发射事件，组件 B 还未挂载，监听还没注册，导致事件丢失。

// 事件监听注册和注销必须在组件生命周期钩子中完成，确保监听和注销成对出现。
// 避免在组件外部注册监听，防止内存泄漏和监听失效。
// 解决事件丢失问题：因为事件是先发射后监听，B 组件会错过事件。解决办法：
// 在事件总线中缓存数据，B 组件挂载时读取缓存数据。
// 或者通过路由参数传递数据（你要求用 mitt，这里用缓存方案）。
import mitt from 'mitt';

type Events = {
  updateData: string;
};

const eventBus = mitt<Events>();

let cachedData: string | null = null;

export function setCachedData(data: string) {
  cachedData = data;
  eventBus.emit('updateData', data);
}

export function getCachedData(): string | null {
  return cachedData;
}

export function clearCachedData() {
  cachedData = null;
}

export default eventBus;
